package jiazhong.hfl20250308;

import java.util.Objects;
import java.util.Scanner;
import java.util.Stack;

public class StackWork {
    /*
    1.有⼀任意长度任意内容集合，求出集合中所有偶数之和
    2.有⼀任意长度任意内容集合，去除集合中重复的元素
    3.有⼀任意长度任意内容集合，找出那个元素出现的次数最多
    4.有⼀个存放学生信息的集合(学⽣属性：编号、姓名和年龄)，求出⽐张三年龄⼤的学⽣(选作)
    5.有⼀个存放边长的集合，计算集合中的边长能够组成多少种不同的三角形
    6.给定⼀个⼤⼩为 n 的集合 nums ,返回其中的多数元素.多数元素是指在集合中出现次数⼤于2/n的元素.
    7.给你⼀个长度为 n 的整数集合 nums 和 ⼀个⽬标值 与 target 最接近。请你从 nums 中选出三个整数,使它们的和与 target 最接近*/

    public static Scanner scanner = new Scanner(System.in);

    //1.有⼀任意长度任意内容集合，求出集合中所有偶数之和
    public static void sumOfEven() {
        System.out.print("请输入集合的长度:");
        int len = scanner.nextInt();//集合长度
        int sum = 0;
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < len; i++) {
            int num = (int) (Math.random() * 10 + 1);//随机生成1-10之间的整数
            stack.push(num);
        }
        System.out.println("原始集合为:" + stack);
        for (Integer pop : stack) {
            if (pop % 2 == 0) {
                sum += pop;
            }
        }
        System.out.println("集合中所有偶数之和为：" + sum);
    }

    //2.有⼀任意长度任意内容集合，去除集合中重复的元素
    public static void removeDuplicate() {
        System.out.print("请输入集合的长度:");
        int len = scanner.nextInt();//集合长度
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < len; i++) {
            int num = (int) (Math.random() * 10 + 1);//随机生成1-10之间的整数
            stack.push(num);
        }
        System.out.println("原始集合为:" + stack);
        System.out.println("去除重复元素后的集合为:");
        while (!stack.isEmpty()) {//判断栈是否为空
            int pop = stack.pop();//弹出栈顶元素
            if (!stack.contains(pop)) {//判断栈顶元素是否在栈中
                System.out.print(pop + ",");
            }
        }
    }


    //3.有⼀任意长度任意内容集合，找出哪个元素出现的次数最多
    public static void maxCount() {
        System.out.print("请输入集合的长度:");
        int len = scanner.nextInt();//集合长度
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < len; i++) {
            int num = (int) (Math.random() * 10 + 1);//随机生成1-10之间的整数
            stack.push(num);
        }
        System.out.println("原始集合为:" + stack);
        int maxCount = 0;
        int maxNum = 0;
        for (Integer pop : stack) {//遍历栈
            int count = 0;//记录pop元素出现的次数
            for (Integer num : stack) {//遍历栈
                if (Objects.equals(pop, num)) {//判断pop元素是否与num元素相同
                    count++;//相同则计数
                }
            }
            if (count > maxCount) {//在内层循环结束后，检查count是否大于当前的最大计数maxCount。
                maxCount = count;//如果count大于maxCount，则更新maxCount为count。
                maxNum = pop;//同时更新出现次数最多的元素maxNum为当前外层循环的pop。
            }
        }
        System.out.println("出现次数最多的元素为：" + maxNum + ",出现次数为：" + maxCount);
    }

    public static void main(String[] args) {
//        sumOfEven();
//        removeDuplicate();
        maxCount();
    }

}
